﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Web.Script.Serialization;
using DECOR.BL.BE;
using System.Collections.Generic;
using DECOR.BL.BC;
using System.Collections.Specialized;
using Newtonsoft.Json;
using CM.BL.BE;

namespace DECOR.Touchapp
{
    public partial class login : System.Web.UI.Page
    {
        JavaScriptSerializer jss = null;
        string pRetval = string.Empty;

        protected void Page_Load(object sender, EventArgs e)
        {
            Response.ContentType = "application/json; charset=UTF-8";
            if (!Request.HttpMethod.Equals("POST"))
            {
                Response.Write("{\"Invalid request\"}");
            }
            else
            {
                pRetval = "{\"success\":{0}, \"errors\":{\"reason\": \"{1}\"}, \"user\":{2}, \"person\":{3}, ";
                pRetval += "\"lstZipCodes\":{4}, \"lstAsesores\":{5}, \"lstBloEnt\":{6}, \"lstBloFac\":{7}, \"lstCondExp\":{8}, ";
                pRetval += "\"lstGrpCond\":{9}, \"lstGrpVend\":{10}, \"lstMotPed\":{11}, \"lstOfVtas\":{12}, \"lstSectores\":{13}, ";
                pRetval += "\"lstTipoDoc\":{14}, \"lstTipoVisita\":{15}, ";
                pRetval += "\"lstMotivosRechazo\":{16}, \"lstGrupoMateriales\":{17}, ";
                pRetval += "\"lstDenom\":{18}, \"lstMoneda\":{19}, ";
                pRetval += "\"lstMotivoBloq\":{20}, \"lstClaseDoc\":{21}, ";
                pRetval += "\"lstRFACT\":{22}, \"lstSTATU\":{23}, ";
                pRetval += "\"lstTFPLU\":{24}, \"lstCPag\":{25}, ";
                pRetval += "\"lstJustiResul\":{26}, \"lstStatusRecl\":{27}, ";
                pRetval += "\"lstResultRecl\":{28}, \"lstMotivoRecl\":{29}, ";
                pRetval += "\"lstDocVtaCot\":{30}, \"lstCanales\":{31}, ";
                pRetval += "\"lstCondPago\":{32}, "; //@@@@@@
                pRetval += "\"lstUbigeo\":{33}, \"lstGradoInst\":{34}, \"lstPreguntas\":{35} ";
                pRetval += "}";

                SAPUserBE pSAPUser = new SAPUserBE();
                pSAPUser.User = Request.Params["usuario"];
                pSAPUser.Password = Request.Params["clave"];
                pSAPUser.Language = Request.Params["idioma"];
                pSAPUser.Id = (Guid.NewGuid()).ToString();
                //CARGANDO CREDDENTIALSCONTROLLER
                NameValueCollection param = new NameValueCollection();
                param.Add("Id", pSAPUser.Id);
                param.Add("UserId", Request.Params["usuario"]);
                param.Add("PwdId", Request.Params["clave"]);
                CredencialesController.cargarInfo(param);
                if (string.IsNullOrEmpty(pSAPUser.User) || string.IsNullOrEmpty(pSAPUser.Password)) { Response.Write("{\"Invalid request\"}"); return; }

                RfcConfigParametersBE pUsuarioWeb = new RfcConfigParametersBE();
                //login ok
                string retval = this.SAPLogin(pSAPUser, ref pUsuarioWeb);
                if (string.IsNullOrEmpty(retval))
                {
                    pRetval = pRetval.Replace("{0}", "true");
                    jss = new JavaScriptSerializer();
                    string jSON = string.Empty;
                    //rescatamos los tipos de documento
                    List<TipoDocumentoBE> lstTipoDocumentos = new List<TipoDocumentoBE>();
                    lstTipoDocumentos = ParametroBC.Instance.getTipoDocumentos();
                    TipoDocumentoBE objBlankTD = new TipoDocumentoBE();
                    objBlankTD.Codigo = " ";
                    objBlankTD.Descripcion = " ";
                    lstTipoDocumentos.Insert(0, objBlankTD);
                    jSON = jss.Serialize(lstTipoDocumentos);
                    pRetval = pRetval.Replace("{14}", jSON);

                    //Rescatamos tabla Doc. Vta. requieren cotizacion
                    //List<GenericBE> lstDocVtaCot = new List<GenericBE>();
                    //lstDocVtaCot = ParametroBC.Instance.getDocVtaCot();
                    //jSON = jss.Serialize(lstDocVtaCot);
                    pRetval = pRetval.Replace("{30}", "[]");

                    //--rescatar parámetros genéricos
                    List<GenericBE> lstZipCodes = new List<GenericBE>();
                    List<GenericBE> lstAsesores = new List<GenericBE>();
                    List<GenericBE> lstBloEnt = new List<GenericBE>();
                    List<GenericBE> lstBloFac = new List<GenericBE>();
                    List<GenericBE> lstCondExp = new List<GenericBE>();
                    List<GenericBE> lstGrpCond = new List<GenericBE>();
                    List<GenericBE> lstGrpVend = new List<GenericBE>();
                    List<GenericBE> lstMotPed = new List<GenericBE>();
                    List<GenericBE> lstOfVtas = new List<GenericBE>();
                    List<GenericBE> lstSectores = new List<GenericBE>();
                    List<GenericBE> lstTipoDoc = new List<GenericBE>();
                    List<GenericBE> lstTipoVisita = new List<GenericBE>();

                    retval = this.getDataDDL(ref lstZipCodes, ref lstAsesores, ref lstBloEnt, ref lstBloFac, ref lstCondExp,
                                            ref lstGrpCond, ref lstGrpVend, ref lstMotPed, ref lstOfVtas, ref lstSectores,
                                            ref lstTipoDoc, ref lstTipoVisita);


                    //agregamos un registro vacio a la lista de documentos
                    //21.05.2012 rhuapaya
                    if (lstTipoDoc != null)
                    {
                        GenericBE objBlanco = new GenericBE();
                        objBlanco.Codigo = " ";
                        objBlanco.Descripcion = " ";
                        lstTipoDoc.Insert(0, objBlanco);
                    }
                    //********************************************************************++

                    jSON = jss.Serialize(pSAPUser);
                    pRetval = pRetval.Replace("{1}", retval);
                    pRetval = pRetval.Replace("{2}", jSON);
                    if (pUsuarioWeb.PerNr == "00000000")
                    {
                        pUsuarioWeb.PerNr = "";
                    }
                    jSON = jss.Serialize(pUsuarioWeb);
                    pRetval = pRetval.Replace("{3}", jSON);
                    //--listas
                    jSON = jss.Serialize(lstZipCodes); pRetval = pRetval.Replace("{4}", jSON);
                    jSON = jss.Serialize(lstAsesores); pRetval = pRetval.Replace("{5}", jSON);
                    jSON = jss.Serialize(lstBloEnt); pRetval = pRetval.Replace("{6}", jSON);
                    jSON = jss.Serialize(lstBloFac); pRetval = pRetval.Replace("{7}", jSON);
                    jSON = jss.Serialize(lstCondExp); pRetval = pRetval.Replace("{8}", jSON);
                    jSON = jss.Serialize(lstGrpCond); pRetval = pRetval.Replace("{9}", jSON);
                    jSON = jss.Serialize(lstGrpVend); pRetval = pRetval.Replace("{10}", jSON);
                    jSON = jss.Serialize(lstMotPed); pRetval = pRetval.Replace("{11}", jSON);
                    jSON = jss.Serialize(lstOfVtas); pRetval = pRetval.Replace("{12}", jSON);
                    jSON = jss.Serialize(lstSectores); pRetval = pRetval.Replace("{13}", jSON);
                    //jSON = jss.Serialize(lstTipoDoc); pRetval = pRetval.Replace("{14}", jSON);
                    jSON = jss.Serialize(lstTipoVisita); pRetval = pRetval.Replace("{15}", jSON);
                    //-------------------------------------
                    GenericBE objBlank = new GenericBE();
                    objBlank.Codigo = " ";
                    objBlank.Descripcion = " ";
                    //Listamos los motivos de rechazo
                    List<GenericBE> lstMotivosRechazo = new List<GenericBE>();
                    lstMotivosRechazo = PedidoBC.Instance.listarMotivosRechazo();
                    lstMotivosRechazo.Insert(0, objBlank);
                    jSON = jss.Serialize(lstMotivosRechazo);
                    pRetval = pRetval.Replace("{16}", jSON);
                    //Listamos Grupo de Materiales
                    List<GenericBE> lstGrupoMateriales = new List<GenericBE>();
                    lstGrupoMateriales = MaterialBC.Instance.listarGruposMat();
                    lstGrupoMateriales.Insert(0, objBlank);
                    jSON = jss.Serialize(lstGrupoMateriales);
                    pRetval = pRetval.Replace("{17}", jSON);
                    //Cargamos los combos de plan de facturacion
                    List<GenericBE> lstDenom = new List<GenericBE>();
                    List<GenericBE> lstMoneda = new List<GenericBE>();
                    List<GenericBE> lstMotivoBloq = new List<GenericBE>();
                    List<GenericBE> lstClaseDoc = new List<GenericBE>();
                    List<GenericBE> lstRFACT = new List<GenericBE>();
                    List<GenericBE> lstSTATU = new List<GenericBE>();
                    List<GenericBE> lstTFPLU = new List<GenericBE>();
                    List<GenericBE> lstCPag = new List<GenericBE>();

                    ParametroBC.Instance.get_Param_PFact(ref  lstDenom, ref  lstMoneda,
                                                                ref lstMotivoBloq, ref lstClaseDoc, ref lstRFACT,
                                                                ref  lstSTATU, ref lstTFPLU, ref lstCPag);

                    jSON = jss.Serialize(lstDenom);
                    pRetval = pRetval.Replace("{18}", jSON);
                    jSON = jss.Serialize(lstMoneda);
                    pRetval = pRetval.Replace("{19}", jSON);
                    jSON = jss.Serialize(lstMotivoBloq);
                    pRetval = pRetval.Replace("{20}", jSON);
                    jSON = jss.Serialize(lstClaseDoc);
                    pRetval = pRetval.Replace("{21}", jSON);
                    jSON = jss.Serialize(lstRFACT);
                    pRetval = pRetval.Replace("{22}", jSON);
                    jSON = jss.Serialize(lstSTATU);
                    pRetval = pRetval.Replace("{23}", jSON);
                    jSON = jss.Serialize(lstTFPLU);
                    pRetval = pRetval.Replace("{24}", jSON);
                    jSON = jss.Serialize(lstCPag);
                    pRetval = pRetval.Replace("{25}", jSON);
                    //cargamos la lista de canales
                    List<GenericBE> lstCanalDist = ClienteBC.Instance.listaCanalDist("", "1000");
                    if (lstCanalDist != null || lstCanalDist.Count > 0)
                    {
                        jSON = jss.Serialize(lstCanalDist);
                        pRetval = pRetval.Replace("{31}", jSON);
                    }
                    else
                    {
                        pRetval = pRetval.Replace("{31}", "[]");
                    }
                    cargarCombosReclamos();
                    //*************************************************************************
                    //Lista de condiciones de pago// @@@@@@+
                    GenericBE objVacio = new GenericBE();
                    objVacio.Codigo = "";
                    objVacio.Descripcion = "---";
                    List<GenericBE> lstCondicionesPago = CondicionPagoBC.Instance.listar();
                    if (lstCondicionesPago != null || lstCondicionesPago.Count > 0)
                    {
                        lstCondicionesPago.Add(objVacio);
                        jSON = jss.Serialize(lstCondicionesPago);
                        pRetval = pRetval.Replace("{32}", "[]");
                    }
                    else
                    {
                        pRetval = pRetval.Replace("{32}", "[]");
                    }
                    //*************************************************************************
                    //Listamos Grado de instruccion y ubigeo
                    ListarGradoInstruccion();
                    ListarUbigeos();
                    ListaPreguntas();
                    //pRetval = pRetval.Replace("{33}", "[]");
                    //pRetval = pRetval.Replace("{34}", "[]");
                    //pRetval = pRetval.Replace("{35}", "[]");
                }
                else
                {
                    pRetval = pRetval.Replace("{0}", "false");
                    pSAPUser = null; pUsuarioWeb = null;

                    pRetval = pRetval.Replace("{1}", retval);
                    //lo usamos para reemplazar los valores que están entre llaves en la variable
                    //pRetVal, por ejemplo {8}, {9} son valores que pertenecen a listas y deben ser 
                    //reemplazados por null o [], en esta caso usamos null, sino se reemplaza sencha
                    //no lo interpreta.
                    for (int i = 2; i <= 35; i++) //@@@@@@
                    {
                        pRetval = pRetval.Replace("{" + i.ToString() + "}", "null");
                    }
                    //Response.ContentType = "application/json; charset=UTF-8";
                    //Response.Write(pRetval);
                    //return;
                }                

                Response.ContentType = "application/json; charset=UTF-8";
                Response.Write(pRetval);
            }
        }

        private string SAPLogin(SAPUserBE pSAPUser, ref RfcConfigParametersBE pUsuarioWeb)
        {
            //asignar nuevo id de conexión
            pUsuarioWeb.Id = pSAPUser.Id; //Session.SessionID;
            pUsuarioWeb.UsuarioWEB = pSAPUser.User;
            pUsuarioWeb.PasswordWEB = pSAPUser.Password;
            pUsuarioWeb.Uname = pSAPUser.User;// "VENDEDORLM"; //WEBDIST
            pUsuarioWeb.Passwd = pSAPUser.Password;// "DECORCENTER";

            string retval = UsuarioBC.login(ref pUsuarioWeb);
            return retval;
        }

        private string getDataDDL(ref List<GenericBE> lstZipCodes, ref List<GenericBE> lstAsesores,
            ref List<GenericBE> lstBloEnt, ref List<GenericBE> lstBloFac,
            ref List<GenericBE> lstCondExp, ref List<GenericBE> lstGrpCond,
            ref List<GenericBE> lstGrpVend, ref List<GenericBE> lstMotPed,
            ref List<GenericBE> lstOfVtas, ref List<GenericBE> lstSectores,
            ref List<GenericBE> lstTipoDoc, ref List<GenericBE> lstTipoVisita)
        {
            try
            {
                ParametroBC.Instance.getDataDDL(ref lstZipCodes, ref lstAsesores, ref lstBloEnt, ref lstBloFac,
                    ref lstCondExp, ref lstGrpCond, ref lstGrpVend, ref lstMotPed, ref lstOfVtas,
                    ref lstSectores, ref lstTipoDoc, ref lstTipoVisita);
            }
            catch (Exception ex) { return ex.Message; }
            return string.Empty;
        }

        private void cargarCombosReclamos()
        {
            CombosReclamoBE combos = ReclamoBC.Instance.getCombosReclamo();
            List<JustificaionBE> lstJustiResul = combos.T_Justi.FindAll(x => x.CodDep == "004");
            List<GenericBE> lstStatusRecl = combos.T_STATUS;
            List<GenericBE> lstResultRecl = combos.T_RESULTADO;
            List<GenericBE> lstMotivoRecl = combos.T_MOTIVO;
            string jSON = string.Empty;
            if (lstJustiResul == null || lstJustiResul.Count <= 0)
            {
                jSON = jss.Serialize(lstJustiResul);
                pRetval = pRetval.Replace("{26}", "null");
            }
            else
            {

                jSON = jss.Serialize(lstJustiResul);
                pRetval = pRetval.Replace("{26}", jSON);
            }
            if (lstStatusRecl == null || lstStatusRecl.Count <= 0)
            {
                jSON = jss.Serialize(lstStatusRecl);
                pRetval = pRetval.Replace("{27}", "null");
            }
            else
            {
                jSON = jss.Serialize(lstStatusRecl);
                pRetval = pRetval.Replace("{27}", jSON);
            }
            if (lstResultRecl == null || lstResultRecl.Count <= 0)
            {
                jSON = jss.Serialize(lstResultRecl);
                pRetval = pRetval.Replace("{28}", "null");
            }
            else
            {
                jSON = jss.Serialize(lstResultRecl);
                pRetval = pRetval.Replace("{28}", jSON);
            }
            if (lstMotivoRecl == null || lstMotivoRecl.Count <= 0)
            {
                jSON = jss.Serialize(lstMotivoRecl);
                pRetval = pRetval.Replace("{29}", "null");
            }
            else
            {
                jSON = jss.Serialize(lstMotivoRecl);
                pRetval = pRetval.Replace("{29}", jSON);
            }
        }

        private void ListarUbigeos()
        {
            List<UbigeoBE> ListarUbigeos = UbigeoBC.Instance.listUbigeo();
            List<UbigeoBE> listTemp = ListarUbigeos.FindAll(X => X.UBI_DIST == "Lima");
            List<UbigeoBE> listTemp1 = ListarUbigeos.FindAll(X => X.UBI_DIST == "Callao");
            List<UbigeoBE> listTemp2 = ListarUbigeos.FindAll(X => X.UBI_DIST == "Arequipa");
            List<UbigeoBE> listTemp3 = ListarUbigeos.FindAll(X => X.UBI_DIST != "Lima" && X.UBI_DIST != "Callao" && X.UBI_DIST != "Arequipa");
            
            ListarUbigeos.Clear();
            ListarUbigeos.AddRange(listTemp);
            ListarUbigeos.AddRange(listTemp1);
            ListarUbigeos.AddRange(listTemp2);
            ListarUbigeos.AddRange(listTemp3);

            string jSON = string.Empty;
            if (ListarUbigeos != null || ListarUbigeos.Count > 0)
            {
                jSON = jss.Serialize(ListarUbigeos);
                pRetval = pRetval.Replace("{33}", jSON);
            }
            else
            {
                pRetval = pRetval.Replace("{33}", "[]");
            }
        }

        private void ListarGradoInstruccion()
        {
            List<GenericBE> ListarGradoInst = ClienteBC.Instance.ListarGradoInstruccion();
            string jSON = string.Empty;
            if (ListarGradoInst != null || ListarGradoInst.Count > 0)
            {
                jSON = jss.Serialize(ListarGradoInst);
                pRetval = pRetval.Replace("{34}", jSON);
            }
            else
            {
                pRetval = pRetval.Replace("{34}", "[]");
            }
        }

        private void ListaPreguntas()
        {
            List<ClientePreResBE> ListaPreguntas = ClienteBC.Instance.ListaPreguntas();
            string jSON = string.Empty;
            if (ListaPreguntas != null || ListaPreguntas.Count > 0)
            {
                //jSON = jss.Serialize(ListaPreguntas);
                jSON = JsonConvert.SerializeObject(ListaPreguntas);
                pRetval = pRetval.Replace("{35}", jSON);
            }
            else
            {
                pRetval = pRetval.Replace("{35}", "[]");
            }
        }

        private string logout() {
            return UsuarioBC.Instance.logout(CredencialesController.Usuario.Id);
        }
    }
}
